package com.demo.java.OD551_600.OD552;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【食堂供餐(B卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146532530
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        // 读取员工数量N和餐厅最大配餐能力M
        int N = in.nextInt();
        int M = in.nextInt();
        int[] P = new int[N];  // 存储每个员工的配餐需求

        int amount = 0;  // 计算所有员工的总需求
        for (int i = 0; i < N; i++) {
            P[i] = in.nextInt();  // 读取每个员工的配餐需求
            amount += P[i];  // 累加员工的总需求
        }

        // 设置二分法的上下界
        int left = 0;
        int right = amount - M;

        // 使用二分法查找最小的满足条件的配餐速度
        while (left < right) {
            int mid = (left + right) / 2;  // 计算中间速度
            if (check(mid, M, N, P)) {  // 检查当前速度是否能满足条件
                right = mid;  // 如果可以满足，缩小查找范围
            } else {
                left = mid + 1;  // 如果不能满足，增大速度
            }
        }

        // 输出最小配餐速度
        System.out.println(left);
    }

    // 检查当前速度下，是否可以满足所有员工的需求
    public static boolean check(int speed, int total, int N, int[] P) {
        boolean result = true;  // 初始假设可以满足条件
        for (int i = 0; i < N; i++) {
            total -= P[i];  // 减去当前员工的需求
            if (total < 0) {  // 如果需求不足，说明当前速度不能满足条件
                result = false;
                break;
            }
            total += speed;  // 增加当前速度所能满足的配餐量
        }
        return result;  // 返回是否满足条件
    }
}